#ifndef _UHF_RFID_DRIVER_
#define _UHF_RFID_DRIVER_

#include<pthread.h>

#define	UHF_RFID_FRAME_SOF1		0xA5
#define	UHF_RFID_FRAME_SOF2		0x5A
#define UHF_RFID_FRAME_EOF1		0x0D
#define UHF_RFID_FRAME_EOF2		0x0A

#define	UHF_RFID_FRAME_SOF_LEN	2
#define	UHF_RFID_FRAME_EOF_LEN	2
#define UHF_RFID_FRAME_LEN_LEN	2
#define	UHF_RFID_FRAME_CMD_LEN	1
#define	UHF_RFID_FRAME_CHK_LEN	1

#define UHF_RFID_FRAME_SOF_POS      0
#define UHF_RFID_FRAME_LEN_POS		2
#define	UHF_RFID_FRAME_CMD_POS		4
#define	UHF_RFID_FRAME_PAYLOAD_POS	5

#define UHF_RFID_FRAME_HEADER_LEN	(UHF_RFID_FRAME_SOF_LEN + UHF_RFID_FRAME_LEN_LEN + UHF_RFID_FRAME_CMD_LEN)
#define UHF_RFID_FRAME_FIXED_LEN	(UHF_RFID_FRAME_SOF_LEN + UHF_RFID_FRAME_EOF_LEN + UHF_RFID_FRAME_LEN_LEN + UHF_RFID_FRAME_CMD_LEN + UHF_RFID_FRAME_CHK_LEN)

#define ERROR_COMINIT           -998
#define ERROR_COMMUNICATION     -999
#define ERROR_INITEQUMENT       -1000                       //串口初始化设备失败
#define ERROR_ANTCHECK          -1010                       //天线检测失败
#define ERROR_ANT_DISCONNECT    -1011                       //天线接口未接
#define ERROR_DATASET           -1020                       //设置数据错误
#define ERROR_SET_ANTS			-1030						//天线设置错误
#define ERROR_SET_REGION		-1031						//区域设置错误
#define ERROR_GET_REGION		-1032						//区域获取错误
#define ERROR_INVENTORY_SINGLE	-1050						//单次寻标签错误
#define ERROR_INVENTORY_CONTINUITY	-1051						//连续寻标签错误


#define ERROR_NETINIT           -2000                       //网口初始化失败
#define ERROR_NETCONNECTTIMEOUT -2001                       //连接超时

#define MAX_RECV_BUF			2048

typedef struct {
	int init;
	int fd;
	int print;
	int inv_stop;
	int wridx;
	int rdidx;
	int head;
	int ptr;
	unsigned char chk;
	unsigned char* pbuf;
	pthread_t  threadid;
	
	int (*inv_tag_callback)(unsigned char *pdata, int len);
}UDevice;
	
struct select_params
{
	int target;		//select命令的Target参数
	int action;		//select命令的Action参数
	int truncate;	//select命令的Truncate参数
};

struct Q_params
{
	int algorithm;	//算法，1-动态Q值, 0-固定Q值
	int startQ;		//在固定Q算法下，Q固定为StartQ，忽略MinQ和MaxQ
	int minQ;		//动态Q算法下，最小Q值
	int maxQ;		//动态Q算法下，最大Q值
};

struct query_params
{
	int dr;			//query命令的DR参数
	int coding;		//query命令的M参数
	int TRext;		//query命令的TRext参数
	int sel;		//query命令的sel参数
	int session;	//query命令的session参数
	int target;		//query命令的Target参数
};

/*********************************************************************
*函数名称：UHF_RFID_Reg_InvTagCallBack(UDevice* pDev, void* call)
*函数功能：注册寻标签结果回调函数
*参    数：*pDev -- 设备指针
	       *call -- 回调函数
*返    回：无
**********************************************************************/
void UHF_RFID_Reg_InvTagCallBack(UDevice* pDev, void* call);

/*********************************************************************
*函数名称：UHF_RFID_Open()
*函数功能：初始化串口连接
*参    数：*dev -- 串口设备号，如"/dev/ttyS0"
	       baud -- 串口波特率
*返    回：设备指针
**********************************************************************/
UDevice* UHF_RFID_Init(char *dev, int baud);

/*********************************************************************
*函数名称：UHF_RFID_NetInit()
*函数功能：初始化网络连接, 连接超时时间为10s
*参    数：ip -- 设备IP地址
		   port -- 设备连接端口，默认为20108
*返    回：设备指针
**********************************************************************/
UDevice* UHF_RFID_NetInit(char *ip, int port);

/*********************************************************************
*函数名称：UHF_RFID_DeInit(UDevice* pDev)
*函数功能：去初始化，释放资源
*参    数：*pDev -- 设备指针
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_DeInit(UDevice* pDev);

/*********************************************************************
*函数名称：UHF_RFID_SetBaud()
*函数功能：设置串口波特率
*参    数：*pDev -- 设备指针
		   baud -- 波特率
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetBaud(UDevice *pDev, int baud);

/*********************************************************************
*函数名称：UHF_RFID_Reset()
*函数功能：设备复位
*参    数：*pDev -- 设备指针
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_Reset(UDevice* pDev);

/*********************************************************************
*函数名称：UHF_RFID_GetID()
*函数功能：获取唯一ID
*参    数：*pDev -- 设备指针
           *id -- 返回的设备ID
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetID(UDevice *pDev, unsigned int *id);

/*********************************************************************
*函数名称：UHF_RFID_SetDefault()
*函数功能：设备恢复出厂设置
*参    数：*pDev -- 设备指针
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetDefault(UDevice *pDev);

/*********************************************************************
*函数名称：UHF_RFID_GetTempProt()
*函数功能：获取设备温度保护状态
*参    数：*pDev -- 设备指针
	       *state -- 获取的温度保护状态
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetTempProt(UDevice *pDev, int *state);

/*********************************************************************
*函数名称：UHF_RFID_SetTempProt()
*函数功能：设置设备温度保护状态
*参    数：*pDev -- 设备指针
           state -- 设置温度保护状态
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetTempProt(UDevice *pDev, int state);

/*********************************************************************
*函数名称：UHF_RFID_GetTemp()
*函数功能：获取设备温度
*参    数：*pDev -- 设备指针
           *temp -- 获取温度值
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetTemp(UDevice *pDev, float *temp);

/*********************************************************************
*函数名称：UHF_RFID_SetGpioOutput()
*函数功能：设置GPIO输出
*参    数：*pDev -- 设备指针
           mask -- 掩码,一个bit对应一个GPIO, 如0x01表示使用GPIO1, 0x0A表示使用GPIO2和GPIO4
		   val -- 设置GPIO高低电平，1为高电平，0为低电平，只对mask对应位为1的GPIO有效
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetGpioOutput(UDevice *pDev, unsigned char mask, unsigned char val);

/*********************************************************************
*函数名称：UHF_RFID_GetGpioOutput()
*函数功能：获取GPIO状态
*参    数：*pDev -- 设备指针
           mask -- 掩码,一个bit对应一个GPIO, 如0x01表示使用GPIO1, 0x0A表示使用GPIO2和GPIO4
		   *val -- GPIO高低电一状态
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetGpioOutput(UDevice *pDev, unsigned char mask, unsigned char *val);

/*********************************************************************
*函数名称：UHF_RFID_GetTemp()
*函数功能：获取反射
*参    数：*pDev -- 设备指针
           *loss -- 获取到的反射值
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetLoss(UDevice *pDev, int *loss);

/*********************************************************************
*函数名称：UHF_RFID_GetAntStatus()
*函数功能：获取天线连接状态
*参    数：*pDev -- 设备指针
           *AntStatus -- 天线状态
			AntStatus[0]表示天线1的状态, 值为1表示天线正常，值为0表示天线未连接或未使用
			AntStatus[1]表示天线2的状态, 值为1表示天线正常，值为0表示天线未连接或未使用
			依此类推
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetAntStatus(UDevice *pDev, unsigned char *AntStatus);

/*********************************************************************
*函数名称：UHF_RFID_GetAnts()
*函数功能：获取使用的天线端口
*参    数：*pDev -- 设备指针
           *num -- 使用的天线个数
		   *ants -- 使用的天线号，如ants[3]={1,3,4}，表示使用1、3、4号天线
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetAnts(UDevice *pDev, int *num, int *ants);

/*********************************************************************
*函数名称：UHF_RFID_SetAnts
*函数功能：设置天线
*参    数：*pDev -- 设备指针
           save -- 参数是否掉电保存，0-不保存，1-保存
		   *ants -- 设置使用的天线号，如ants[3]={1,3,4}, 表示设置使用1、3、4号天线
		   num -- 使用的天线个数
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetAnts(UDevice *pDev, int save, int *ants, int num);

/*********************************************************************
*函数名称：UHF_RFID_SetRegion
*函数功能：设置区域
*参    数：*pDev -- 设备指针
           save -- 参数是否掉电保存，0-不保存，1-保存
		   region -- 设置的区域
					0x01 - China1
					0x02 - China2
					0x04 - Europe
					0x08 - USA
					0x16 - Korea
					0x32 - Japan
					0x33 - Brazil
					0x34 - WR1
					0x35 - South Africa
					0x36 - Vietnam
					0x37 - India
					0x38 - TaiWan
					0x39 - Chile
					0x3A - Uruguay
					0x3B - Australia
					0x3C - New Zealand
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetRegion(UDevice *pDev, int save, int region);

/*********************************************************************
*函数名称：UHF_RFID_SetAnts
*函数功能：获取区域
*参    数：*pDev -- 设备指针
           *region -- 获取的区域
					0x01 - China1
					0x02 - China2
					0x04 - Europe
					0x08 - USA
					0x16 - Korea
					0x32 - Japan
					0x33 - Brazil
					0x34 - WR1
					0x35 - South Africa
					0x36 - Vietnam
					0x37 - India
					0x38 - TaiWan
					0x39 - Chile
					0x3A - Uruguay
					0x3B - Australia
					0x3C - New Zealand
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetRegion(UDevice *pDev, unsigned char *region);

/*********************************************************************
*函数名称：UHF_RFID_GetRssi()
*函数功能：获取环境RSSI
*参    数：*pDev -- 设备指针
           *rssi -- rssi值
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetRssi(UDevice *pDev, char *rssi);

/*********************************************************************
*函数名称：UHF_RFID_GetFwVer
*函数功能：获取固件版本
*参    数：*pDev -- 设备指针
           *version -- 版本
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetFwVer(UDevice *pDev, unsigned char *version);

/*********************************************************************
*函数名称：UHF_RFID_GetFwVer
*函数功能：获取硬件件版本
*参    数：*pDev -- 设备指针
           *version -- 版本
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetHwVer(UDevice *pDev, unsigned char *version);

/*********************************************************************
*函数名称：UHF_RFID_GetPower
*函数功能：设置功率
*参    数：*pDev -- 设备指针
           *ant -- 天线号，设置某个天线的功率
		   *read_power -- 读功率
		   *write_power -- 写功率
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetPower(UDevice *pDev, int *ant, int *read_power, int *write_power);

/*********************************************************************
*函数名称：UHF_RFID_SetPower
*函数功能：设置功率
*参    数：*pDev -- 设备指针
           save -- 参数是否掉电保存，0-不保存，1-保存
		   ant -- 天线号，设置某个天线的功率, ant=0时，设置所有天线的功率
		   read_power -- 读功率
		   write_power -- 写功率
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetPower(UDevice *pDev, int save, int ant, int read_power, int write_power);

/*********************************************************************
*函数名称：UHF_RFID_SetFreq
*函数功能：设置工作频率
*参    数：*pDev -- 设备指针
           save -- 参数是否掉电保存，0-不保存，1-保存
		   num -- 频率个数
		   *freq -- 频率，以Hz为单位
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetFreq(UDevice *pDev, int save, int num, int *freq);

/*********************************************************************
*函数名称：UHF_RFID_GetFreq
*函数功能：获取工作频率
*参    数：*pDev -- 设备指针
		   *num -- 频率个数
		   *freq -- 频率，以Hz为单位
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetFreq(UDevice *pDev, int *num, int *freq);

/*********************************************************************
*函数名称：UHF_RFID_SetRFLink
*函数功能：设置RF链路
*参    数：*pDev -- 设备指针
           save -- 参数是否掉电保存，0-不保存，1-保存
		   link -- 链路组合
		   0: DSB_ASK /FM0/ 40 KHz
		   1: PR _ASK /Miller4/ 250KHz
		   2: PR _ASK /Miller4/ 300KHz
		   3: DSB_ASK /FM0/ 400KHz
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetRFLink(UDevice *pDev, int save, int link);

/*********************************************************************
*函数名称：UHF_RFID_GetRFLink
*函数功能：获取RF链路
*参    数：*pDev -- 设备指针
           *link -- 链路组合
		   0: DSB_ASK /FM0/ 40 KHz
		   1: PR _ASK /Miller4/ 250KHz
		   2: PR _ASK /Miller4/ 300KHz
		   3: DSB_ASK /FM0/ 400KHz
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetRFLink(UDevice *pDev, int *link);

/*********************************************************************
*函数名称：UHF_RFID_GetGen2Params
*函数功能：获取Gen2参数
*参    数：*pDev -- 设备指针
           *selparam -- select参数
		   *qparams -- Q值
		   *queryparams -- query参数
		   *linkfreq -- 链路频率
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetGen2Params(UDevice *pDev, struct select_params *selparams, struct Q_params *qparams, struct query_params *queryparams, int *linkfreq);

/*********************************************************************
*函数名称：UHF_RFID_SetGen2Params
*函数功能：设置Gen2参数
*参    数：*pDev -- 设备指针
           *selparam -- select参数
		   *qparams -- Q值
		   *queryparams -- query参数
		   *linkfreq -- 链路频率
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetGen2Params(UDevice *pDev, int save, struct select_params selparams, struct Q_params qparams, struct query_params queryparams, int linkfreq);

/*********************************************************************
*函数名称：UHF_RFID_SetFastID
*函数功能：设置FastID
*参    数：*pDev -- 设备指针
           state -- 1-开，0-关
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetFastID(UDevice *pDev, int state);

/*********************************************************************
*函数名称：UHF_RFID_GetFastID
*函数功能：获取FastID状态
*参    数：*pDev -- 设备指针
           *state -- 状态，0-关，1-开
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetFastID(UDevice *pDev, int *state);

/*********************************************************************
*函数名称：UHF_RFID_SetTagFocus
*函数功能：设置TagFocus功能 
*参    数：*pDev -- 设备指针
           state -- 1-开，0-关
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetTagFocus(UDevice *pDev, int state);

/*********************************************************************
*函数名称：UHF_RFID_GetCW
*函数功能：获取TagFocus状态
*参    数：*pDev -- 设备指针
           *state -- 状态，0-关，1-开
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetTagFocus(UDevice *pDev, int *state);

/*********************************************************************
*函数名称：UHF_RFID_SetWorkWaitTime
*函数功能：设置寻标签工作时间、等待时间
*参    数：*pDev -- 设备指针
           save -- 参数是否掉电保存，0-不保存，1-保存
		   work_time -- 寻标签工作时间
		   wait_time -- 寻标签等待时间
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetWorkWaitTime(UDevice *pDev, int save, int work_time, int wait_time);

/*********************************************************************
*函数名称：UHF_RFID_GetWorkWaitTime
*函数功能：获取寻标签工作时间、等待时间
*参    数：*pDev -- 设备指针
           *work_time -- 寻标签工作时间
		   *wait_time -- 寻标签等待时间
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetWorkWaitTime(UDevice *pDev, int *work_time, int *wait_time);

/*********************************************************************
*函数名称：UHF_RFID_SetInvMultiBank
*函数功能：设置多Bank寻标签
*参    数：*pDev -- 设备指针
           save -- 参数是否掉电保存，0-不保存，1-保存
		   mode -- 0: 只寻EPC 
		           1: 同时寻EPC、TID
				   2: 同时寻EPC、USER区，USER区的偏移地址和长度由user_addr和user_len指定，单位为字
				   3: 同时寻EPC、TID和USER, USER区的偏移地址和长度由user_addr和user_len指定，单位为字
				   4: 同时寻EPC、TID和RFU
				   5: 同时读EPC、RFU区，RFU区的偏移地址和长度由user_addr和user_len指定，单位为字
		   user_addr -- USER区偏移地址
		   user_len -- USER区长度
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetInvMultiBank(UDevice *pDev, int save, int mode, int user_addr, int user_len);

/*********************************************************************
*函数名称：UHF_RFID_GetInvMultiBank
*函数功能：获取多Bank寻标签
*参    数：*pDev -- 设备指针
           *mode -- 0: 只寻EPC 
		           1: 同时寻EPC、TID
				   2: 同时寻EPC、USER区，USER区的偏移地址和长度由user_addr和user_len指定
				   3: 同时寻EPC、TID和USER, USER区的偏移地址和长度由user_addr和user_len指定
				   4: 同时寻EPC、TID和RFU
		   *user_addr -- USER区偏移地址
		   *user_len -- USER区长度
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetInvMultiBank(UDevice *pDev, int *mode, int *user_addr, int *user_len);

/*********************************************************************
*函数名称：UHF_RFID_SetInvMode
*函数功能：设置寻标签模式
*参    数：*pDev -- 设备指针
           save -- 参数是否掉电保存，0-不保存，1-保存
		   mode -- 0: 多标签模式
		           1: 快速读取模式
				   2: 模式3
				   3: 模式4
				   4: 模式5
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetInvMode(UDevice *pDev, int save, int mode);

/*********************************************************************
*函数名称：UHF_RFID_GetInvMode
*函数功能：获取寻标签模式
*参    数：*pDev -- 设备指针
           *mode -- 0: 多标签模式
		           1: 快速读取模式
				   2: 模式3
				   3: 模式4
				   4: 模式5
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetInvMode(UDevice *pDev, int *mode);

/*********************************************************************
*函数名称：UHF_RFID_SetInvRspWithFreq
*函数功能：设置寻卡应答是否包含频率信息
*参    数：*pDev -- 设备指针
           flag -- 1: 开启，0：关闭
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetInvRspWithFreq(UDevice *pDev, int flag);

/*********************************************************************
*函数名称：UHF_RFID_GetInvRspWithFreq
*函数功能：设置寻卡应答是否包含频率信息
*参    数：*pDev -- 设备指针
           flag -- 1: 开启，0：关闭
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetInvRspWithFreq(UDevice *pDev, int *flag);

/*********************************************************************
*函数名称：UHF_RFID_SetRFMicroParams
*函数功能：设置读RFMicro测温芯片参数
*参    数：*pDev -- 设备指针
           use -- 1: 开启，0：关闭
		   target -- Select命令的Target
		   action -- Select命令的Action
		   bank -- Select命令的MemBank
		   ptr -- Select命令的Pointer
		   len -- Select命令的Length
		   trun -- Select命令的Truncate
		   times -- 发送Select命令后，再发送一段continuous wave的时间，单位为0.1ms。最小值为10，对应1ms持续时间，最大值为200，对应20ms持续时间。
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetRFMicroParams(UDevice *pDev, int target, int action, int bank, int ptr, int len, int trun, int time, int use, int mask);

/*********************************************************************
*函数名称：UHF_RFID_SetRFMicroParams
*函数功能：获取读RFMicro测温芯片参数
*参    数：*pDev -- 设备指针
           use -- 1: 开启，0：关闭
		   target -- Select命令的Target
		   action -- Select命令的Action
		   bank -- Select命令的MemBank
		   ptr -- Select命令的Pointer
		   len -- Select命令的Length
		   trun -- Select命令的Truncate
		   times -- 发送Select命令后，再发送一段continuous wave的时间，单位为0.1ms。最小值为10，对应1ms持续时间，最大值为200，对应20ms持续时间。
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetRFMicroParams(UDevice *pDev, int *target, int *action, int *bank, int *ptr, int *len, int *trun, int *time, int *use, int *mask);

/*********************************************************************
*函数名称：UHF_RFID_WriteTag
*函数功能：写标签
*参    数：*pDev -- 设备指针
           *pwd -- 访问密码
		   mmb -- 过滤Bank
		   msa -- 过滤Bank起始地址
		   mdl -- 过滤Bank长度, 单位为bit
		   *mdata -- 过滤数据
		   mb -- 写Bank
		   sa -- 写Bank偏移地址
		   dl -- 写数据长度, 单位为“字”
		   *data -- 写数据
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_WriteTag(UDevice *pDev, unsigned char *pwd, int mmb, int msa, int mdl, unsigned char *mdata, int mb, int sa, int dl, unsigned char *wdata);

/*********************************************************************
*函数名称：UHF_RFID_BlockWriteTag
*函数功能：块写标签
*参    数：*pDev -- 设备指针
           *pwd -- 访问密码
		   mmb -- 过滤Bank
		   msa -- 过滤Bank起始地址
		   mdl -- 过滤Bank长度, 单位为bit
		   *mdata -- 过滤数据
		   mb -- 写Bank
		   sa -- 写Bank偏移地址
		   dl -- 写数据长度, 单位为“字”
		   *data -- 写数据
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_BlockWriteTag(UDevice *pDev, unsigned char *pwd, int mmb, int msa, int mdl, unsigned char *mdata, int mb, int sa, int dl, unsigned char *wdata);

/*********************************************************************
*函数名称：UHF_RFID_BlockEraseTag
*函数功能：块擦标签
*参    数：*pDev -- 设备指针
           *pwd -- 访问密码
		   mmb -- 过滤Bank
		   msa -- 过滤Bank起始地址
		   mdl -- 过滤Bank长度, 单位为bit
		   *mdata -- 过滤数据
		   mb -- 写Bank
		   sa -- 写Bank偏移地址
		   dl -- 写数据长度, 单位为“字”
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_BlockEraseTag(UDevice *pDev, unsigned char *pwd, int mmb, int msa, int mdl, unsigned char *mdata, int mb, int sa, int dl);

/*********************************************************************
*函数名称：UHF_RFID_ReadTag
*函数功能：读标签
*参    数：*pDev -- 设备指针
           *pwd -- 访问密码
		   mmb -- 过滤Bank
		   msa -- 过滤Bank起始地址
		   mdl -- 过滤Bank长度, 单位为bit
		   *mdata -- 过滤数据
		   mb -- 写Bank
		   sa -- 写Bank偏移地址
		   dl -- 写数据长度, 单位为“字”
		   *data -- 写数据
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_ReadTag(UDevice *pDev, unsigned char *pwd, int mmb, int msa, int mdl, unsigned char *mdata, int mb, int sa, int dl, unsigned char *rdata);

/*********************************************************************
*函数名称：UHF_RFID_LockTag
*函数功能：锁标签
*参    数：*pDev -- 设备指针
           *pwd -- 访问密码
		   mmb -- 过滤Bank
		   msa -- 过滤Bank起始地址
		   mdl -- 过滤Bank长度, 单位为bit
		   *mdata -- 过滤数据
		   lockbank -- 锁定的区域，1：EPC; 2: TID; 3:USR
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_LockTag(UDevice *pDev, unsigned char *pwd, int mmb, int msa, int mdl, unsigned char *mdata, int lockbank);

/*********************************************************************
*函数名称：UHF_RFID_UnLockTag
*函数功能：解锁标签
*参    数：*pDev -- 设备指针
           *pwd -- 访问密码
		   mmb -- 过滤Bank
		   msa -- 过滤Bank起始地址
		   mdl -- 过滤Bank长度, 单位为bit
		   *mdata -- 过滤数据
		   lockbank -- 解锁的区域，1：EPC; 2: TID; 3:USR
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_UnLockTag(UDevice *pDev, unsigned char *pwd, int mmb, int msa, int mdl, unsigned char *mdata, int unlockbank);

/*********************************************************************
*函数名称：UHF_RFID_UnLockTag
*函数功能：杀死标签
*参    数：*pDev -- 设备指针
           *pwd -- 访问密码
		   mmb -- 过滤Bank
		   msa -- 过滤Bank起始地址
		   mdl -- 过滤Bank长度, 单位为bit
		   *mdata -- 过滤数据
		   lockbank -- 解锁的区域，1：EPC; 2: TID; 3:USR
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_KillTag(UDevice *pDev, unsigned char *pwd, int mmb, int msa, int mdl, unsigned char *mdata);

/*********************************************************************
*函数名称：UHF_RFID_SetFilter
*函数功能：设置寻标签过滤
*参    数：*pDev -- 设备指针
           save -- 参数是否掉电保存，0-不保存，1-保存
		   mmb -- 过滤Bank
		   msa -- 过滤Bank起始地址
		   mdl -- 过滤Bank长度, 单位为bit
		   *mdata -- 过滤数据
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetFilter(UDevice *pDev, int save, int mmb, int msa, int mdl, unsigned char *mdata);

/*********************************************************************
*函数名称：UHF_RFID_SetCW
*函数功能：连续发载波
*参    数：*pDev -- 设备指针
           state -- 1-开，0-关
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_SetCW(UDevice *pDev, int state);

/*********************************************************************
*函数名称：UHF_RFID_GetCW
*函数功能：获取连续发载波状态
*参    数：*pDev -- 设备指针
           *state -- 状态，0-关，1-开
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_GetCW(UDevice *pDev, int *state);

/*********************************************************************
*函数名称：UHF_RFID_IventorySingle
*函数功能：单次寻标签
*参    数：*pDev -- 设备指针
           times -- 寻标签超时时间(ms)
		   *data -- 寻标签返回数据
		   *datalen -- 返回数据长度
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_IventorySingle(UDevice *pDev, unsigned short times, unsigned char *data, int *datalen);

/*********************************************************************
*函数名称：UHF_RFID_IventoryContinuity
*函数功能：连续寻标签
*参    数：*pDev -- 设备指针
           times -- 寻标签次数，连续寻标签次数范围为1~0xFFFF，times=0时无限次寻标签
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_IventoryContinuity(UDevice *pDev, unsigned short times);

/*********************************************************************
*函数名称：UHF_RFID_StopInventory
*函数功能：停止连续寻标签
*参    数：*pDev -- 设备指针
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_StopInventory(UDevice *pDev);

/*********************************************************************
*函数名称：UHF_RFID_FwUpgrade
*函数功能：固件升级
*参    数：*pDev -- 设备指针
           mode -- 0：升级主板，1：升级模块
		   *filepath -- 升级文件路径，包含文件名
		   *filename -- 升级文件名
*返    回：0 -- 成功
*          其它值 -- 失败
**********************************************************************/
int UHF_RFID_FwUpgrade(UDevice *pDev, int mode, char *filepath, char *filename);

#endif
